package com.bjsxt.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.bjsxt.domain.Account;
import com.bjsxt.modle.AccountVo;

import java.math.BigDecimal;

public interface AccountService extends IService<Account> {
    /**
     * 根据币种 id 和用户 id 查询用户财产记录信息
     *
     * @param coinId 币种 id
     * @param userId 用户 id
     * @return 财产记录
     */
    Account getAccountByCoinIdAndUserId(Long coinId, Long userId);

    /**
     * 进行资金的流转
     *
     * @param userId         付款方用户 id
     * @param toUserId       收款方用户 id
     * @param cashRechargeId 订单 ID
     * @param coinId         转账的币种 id
     * @param num            转账金额
     * @param fee            手续费
     * @param direction      入账为1，出账为2
     * @param businessType   业务类型（具体参数请查看文档）
     * @param remark         流水状态：,充值,提现,冻结,解冻,转出,转入
     * @return true 转账成功 false 转账失败
     */
    boolean accountTransfer(Long userId, Long toUserId, Long cashRechargeId, Long coinId, BigDecimal num, BigDecimal fee, Byte direction, String businessType, String remark);

    /**
     * 根据用户 id 和币种名称查询用户的账户余额
     *
     * @param userId   用户 id
     * @param coinName 币种名称
     * @return 财产记录信息
     */
    AccountVo getByUserIdAndCoinName(Long userId, String coinName);

    /**
     * 扣减锁定账户的余额
     *
     * @param userId  用户 id
     * @param coinId  币种 id
     * @param mum     扣减的金额
     * @param fee     手续费
     * @param orderId 流水编号
     * @param type    类型
     * @return true 扣减成功 false 扣减失败
     */
    boolean deductionAmount(Long userId, Long coinId, BigDecimal mum, BigDecimal fee, Long orderId, String type);
}
